// src/router/index.ts
import {createRouter, createWebHistory} from 'vue-router'
import {useUserStore} from '@/stores/user'
import DefaultLayout from '@/layouts/DefaultLayout.vue'
import LoginView from '@/views/LoginView.vue'

const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/login',
      name: 'login',
      component: LoginView,
      meta: {title: '登录'}
    },
    {
      path: '/',
      name: 'layout',
      component: DefaultLayout,
      redirect: '/dashboard',
      children: [
        {
          path: 'dashboard',
          name: 'dashboard',
          // 懒加载一个空的仪表盘页面
          component: () => import('@/views/DashboardView.vue'),
          meta: {title: '仪表盘', requiresAuth: true}
        },
        // +++ 新增系统管理路由 +++
        {
          path: '/system',
          name: 'system',
          redirect: '/system/user',
          meta: {
            title: '系统管理',
            requiresAuth: true,
            requiredRoles: ['ADMIN'] // +++ 关键标记：添加一个 meta 字段
          },
          children: [
            {
              path: 'user',
              name: 'system-user',
              component: () => import('@/views/system/UserView.vue'), // <<-- 我们将要创建的文件
              meta: {title: '用户管理'}
            },
            {
              path: 'role',
              name: 'system-role',
              component: () => import('@/views/system/RoleView.vue'), // <<-- 我们将要创建的文件
              meta: {title: '角色管理'}
            }
          ]
        }
        // TODO: [阶段 2-后续] 货品、供应商等路由
        // TODO: 其他业务路由将在这里添加
      ]
    },
    // 将所有未匹配的路由重定向到 404 页面
    {
      path: '/:pathMatch(.*)*',
      name: 'NotFound',
      component: () => import('@/views/NotFoundView.vue')
    }
  ]
})

// 全局前置导航守卫
// --- 升级我们的导航守卫 ---
router.beforeEach(async (to, from, next) => {
  const userStore = useUserStore()
  const isAuthenticated = userStore.isAuthenticated

  if (isAuthenticated) {
    // 如果已登录
    if (!userStore.userInfo) {
      // 但 store 中没有用户信息（刷新页面）
      try {
        await userStore.fetchUserInfo() // 重新获取用户信息
      } catch (error) {
        await userStore.logout()
        next({name: 'login', query: {redirect: to.fullPath}})
        return
      }
    }

    // +++ 关键逻辑：检查角色权限 +++
    const requiredRoles = to.meta.requiredRoles as string[] | undefined
    if (requiredRoles && requiredRoles.length > 0) {
      const userRoles = userStore.userInfo?.roles || []

      // 检查用户是否拥有目标路由所需的 *至少一个* 角色
      const hasPermission = requiredRoles.some(role => userRoles.includes(role))

      if (!hasPermission) {
        // 如果没有权限，发出提示并中断导航，停留在 'from' 页面
        // 或者重定向到仪表盘
        Message.error('您没有权限访问此页面')
        // 如果 from.name 存在，则返回上一页，否则去 dashboard
        next(from.name ? false : {name: 'dashboard'})
        return
      }
    }
    // --- 权限检查结束 ---

    if (to.name === 'login') {
      next({name: 'dashboard'})
    } else {
      next()
    }
  } else {
    // 如果未登录
    if (to.meta.requiresAuth) {
      next({name: 'login', query: {redirect: to.fullPath}})
    } else {
      next()
    }
  }
})

export default router
